Bar code symbologies are widely used for data collection. The first bar code symbologies developed, such as U.P.C., EAN, Code 39 and Code 93 can be referred to as "linear" symbologies because data in a given symbol is decoded along one direction or axis. Linear symbologies generally encode data characters as parallel arrangements of multiple width rectangular bars and spaces. Each unique pattern of bars and spaces within a predetermined width defines a particular data character. A given linear symbol encodes several data characters along its length as several groups of unique bar and space patterns.
Such linear symbologies are typically decoded using laser scanners or wand-based readers. In general, bar code readers scan a symbol and sample the scan line or lines to get a one-dimensional signal waveform and/or a sequence of distances between the bars and spaces in the symbol, and then analyze the waveform or distances to deduce the data encoded in the symbol. Various methods of decoding linear symbologies exist, such as edge-to-edge (element pairs) decoding of individual elements in a symbol, bar-to-bar or space-to-space comparisons, Factor R, and other known decoding methods. Each of such decoding methods provides an optimal method of decoding symbols from a particular symbology, of a particular form, or within a particular environment. Similarly, various methods exist in data scanning and waveform sampling to optimally attack different problems such as damaged symbols, blurring in symbol images, and so on. Additionally, various known methods exist for filtering or processing a waveform before decoding it to thereby improved decoding rates.
As data collection markets grew, greater amounts of data were required to be encoded within a smaller area (i.e., greater "information density"). To increase the information density in bar code symbologies, "multi-row" or "stacked" symbologies were developed such as Code 49 and PDF417. Stacked symbologies generally employ several adjacent rows, each row having several characters defined by groups of multiple width bars and spaces.
Difficulties arose in attempting to read and decode these stacked symbologies. For example, a typical laser scanner must be precisely aligned with each row in a stacked symbol for it to scan and properly decode the groups of bars and spaces in each row. If the laser scanner is skewed so that its beam scans across several rows, the resulting scan data cannot be accurately decoded. One known method, described in U.S. Pat. No. 5,243,655 (the '655 patent) allows a laser scanner to decode stacked bar code symbols, particularly PDF417 symbols. The scanner under the '655 patent, however, requires significant processing time. Additionally, the method of decoding a stacked bar code under the '655 patent is limited to use with a laser scanner.
As the result of such limitations of laser scanners, and to accommodate the increasing information-density in developing symbologies, such as the stacked symbologies, area or two-dimensional readers were created. U.S. Pat. No. 5,124,537 (the '537 patent) describes a reader using virtual scan of a digital image memory to create the equivalent scanning pattern of a mechanical laser scanner. A two-dimensional image of a bar code symbol at any random orientation is captured in the image memory. A microprocessor in the reader scans the image memory to create a virtual scan equivalent to the scan pattern of a laser scanner. Alternatively, the image memory is divided into a plurality of memory segments, and virtual scan is provided simultaneously in each of the respective memory segments.
U.S. Pat. No. 5,155,343 (the '343 patent) describes an area reader that apparently improves over the method described in the '537 patent. The reader described in the '343 patent includes an image capture means for storing a two-dimensional image of the reader's field of view. The captured image may contain a bar code symbol. Once the image is captured in memory, a software method locate; the bar code symbol within the stored image and provides a coarse orientation of the symbol. After the image of the bar code symbol is located, and its coarse orientation determined, the software method determines a fine orientation of the symbol. Thereafter, the method filters, scans and decodes the bar code symbol.
Numerous other known methods of locating and decoding stacked and area symbologies exist. Each method typically provides an optimal method of decoding a particular symbology, or symbologies in a particular environment. Additional methods and routines exist for locating and decoding machine-readable symbols having damage, suffering from printing errors, having optical distortions, etc. Again, each of such methods is particularly suited for a particular type of damage or distortion for which a symbol suffers. In general, each method of sampling, detecting and decoding a particular symbol of a symbology provides a distribution or statistical sampling of data associated with the method's success in correctly sampling, detecting End decoding the information encoded in the symbol. Conversely, each method includes error rates of false detection and incorrect detection associated with the method. Overall, each method will have properties which address a particular symbology or problem more effectively than another method. Likewise, the particular method will have weaknesses or shortcomings for a particular problem that is effectively addressed by another method. For example, a particular method of sampling bars of a linear symbology can effectively sample, detect and decode such a symbol placed on random or noisy backgrounds. However, this method can be ineffective against the same symbol printed with wavy or noisy bars but on a noiseless background. Typically due to limitations in processing power and the time required to implement both of such methods, only one of such methods are typically included in a given reader.